package com.obtk.byproperty.controller;

import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@RestController
public class FIleController {
    // 文件上传位置
    @Value("${file.upload.path}")
    private String filePath;
    /**
     * 向文件上传页面跳转
     *
     * @return
     */

//    @RequestMapping("/file")
//    public String upload(HttpServletRequest request, @RequestParam("file") MultipartFile file) throws IOException {
//        String finalName = null;
//        // 判断文件是否为空,不为空则进行文件上传
//        if (!file.isEmpty()) {
//            // 获取源文件名称
//            String fileName = file.getOrigin  alFilename();
//            // 获取源文件后缀名
//            String suffix = FilenameUtils.getExtension(fileName);
//            // 使用UUID重命名文件名称
//            String newFileName = UUID.randomUUID().toString().
//                    replace("-", "") + (".") + suffix;
//            // 使用日期解决同一文件夹中文件过多问题(以当前日期命名文件夹)
//            String datePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
//            // 组装最终文件名
//             finalName = datePath + "/" + newFileName;
//            // 构建文件对象
//            File dest = new File(filePath + finalName);
//            // 判断该文件夹是否存在,不存在则创建
//            if (!dest.getParentFile().exists()) {
//                dest.getParentFile().mkdirs(); // 创建文件夹
//            }
//            try {
//                // 将文件保存到硬盘
//                file.transferTo(dest);
//                // 将当前图片放到模型中,便于页面回显
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
//        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//         request = requestAttributes.getRequest();
//
//        String localAddr = request.getLocalAddr();
//        int serverPort = request.getServerPort();
//        System.out.println(finalName);
//        // 返回页面(该页面是templates目录下的页面)
//        return finalName;
//    }

    @RequestMapping("/file")
    public ModelAndView upload(HttpServletRequest request, @RequestParam("file") MultipartFile file) throws IOException {
        String finalName = null;
        // 判断文件是否为空,不为空则进行文件上传
        if (!file.isEmpty()) {
            // 获取源文件名称
            String fileName = file.getOriginalFilename();
            // 获取源文件后缀名
            String suffix = FilenameUtils.getExtension(fileName);
            // 使用UUID重命名文件名称
            String newFileName = UUID.randomUUID().toString().
                    replace("-", "") + (".") + suffix;
            // 使用日期解决同一文件夹中文件过多问题(以当前日期命名文件夹)
            String datePath = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
            // 组装最终文件名
            finalName = datePath + "/" + newFileName;
            // 构建文件对象
            File dest = new File(filePath + finalName);
            // 判断该文件夹是否存在,不存在则创建
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdirs(); // 创建文件夹
            }
            try {
                // 将文件保存到硬盘
                file.transferTo(dest);
                // 将当前图片放到模型中,便于页面回显
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("image",finalName);
        modelAndView.setViewName("forward:index");
        // 返回页面(该页面是templates目录下的页面)
        return modelAndView;
    }

}
